﻿using System;
using System.Threading;

namespace Black.Surface2DEngine.Common
{
    /// <summary>
    /// Défini un processus synchronisé
    /// </summary>
    public class ThreadItem
    {
        #region Variables d'instances

        private object[] m_oParameters;
        private ThreadHandler m_oProcess;

        #endregion

        #region Constructeur

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        /// <param name="p_oProcess">Fontion de traitement à exécuter</param>
        public ThreadItem(ThreadHandler p_oProcess, params object[] p_oParams)
        {
            this.m_oProcess = p_oProcess;
            this.m_oParameters = p_oParams;
        }

        #endregion

        #region Fonctions internes

        /// <summary>
        /// Démare le processus
        /// </summary>
        /// <param name="p_oState">Statut du Thread</param>
        internal void Start(Object p_oState)
        {
            AutoResetEvent oEvent = (AutoResetEvent)p_oState;

            // On lance le traitement

            this.m_oProcess(this.m_oParameters);

            // Thread terminée

            oEvent.Set();
        }

        #endregion
    }
}
